package com.atguigu.jxc.service.impl;

import com.atguigu.jxc.dao.GoodsTypeDao;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.service.GoodsTypeService;
import com.google.gson.JsonArray;

import com.google.gson.JsonObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.List;


@Service
public class GoodsTypeServiceImpl implements GoodsTypeService {

    @Autowired
    private GoodsTypeDao goodsTypeDao;


    // 获取商品分类
    @Override
    public String getGoodsType() {
        return this.getAllGoodsType(-1).toString();
    }

    //添加商品分类
    @Override
    public void saveGoodsType(String goodsTypeName, Integer pId) {
        //根据PId获取商品类别
        GoodsType goodsType = goodsTypeDao.selectGoodsTypeById(pId);
        //子节点
        if (goodsType.getGoodsTypeState() == 0) {
            //添加成根节点
            goodsType.setGoodsTypeState(1);
            goodsTypeDao.updateGoodsTypeState(goodsType);
        }
        goodsTypeDao.insertGoodsType(goodsTypeName, pId);
    }

    // 删除商品分类
    @Override
    public void deleteGoodsType(Integer goodsTypeId) {
        //查询商品分类
        GoodsType goodsType = goodsTypeDao.selectGoodsTypeById(goodsTypeId);
        goodsTypeDao.deleteGoodsType(goodsTypeId);
        //根据goodsType的pid查询分类，
        List<GoodsType> goodsTypeList = goodsTypeDao.selectGoodsTypeByPid(goodsType.getPId());
        // 判断list如果是空 修改状态
        if (CollectionUtils.isEmpty(goodsTypeList)) {
            //修改状态
            goodsTypeDao.updateGoodsTypeState(goodsType);
        }


    }


    //递归查询所有商品分类
    public JsonArray getAllGoodsType(Integer pid) {

        //  根据父商品分类id获取商品分类
        JsonArray array = this.getGoodsTypeByPid(pid);

        for (int i = 0; i < array.size(); i++) {
            JsonObject obj = (JsonObject) array.get(i);

            if ("open".equals(obj.get("state"))) { //  如果是叶子节点，不再递归
                continue;
            } else { //  如果是根节点，继续递归查询
                obj.add("children", this.getAllGoodsType(obj.get("id").getAsInt()));
            }
        }

        return array;
    }


    //根据父商品分类id获取商品分类
    public JsonArray getGoodsTypeByPid(Integer pid) {

        JsonArray array = new JsonArray();

        List<GoodsType> goodsTypeList = goodsTypeDao.selectGoodsTypeByPid(pid);

        //  遍历
        for (GoodsType goodsType : goodsTypeList) {

            JsonObject obj = new JsonObject();

            obj.addProperty("id", goodsType.getGoodsTypeId());
            obj.addProperty("text", goodsType.getGoodsTypeName());
            obj.addProperty("iconCls", "goods-type");

            if (goodsType.getGoodsTypeState() == 0) {
                //  叶子节点
                obj.addProperty("state", "open");
            } else {
                //  根节点
                obj.addProperty("state", "closed");
            }
            array.add(obj);
        }
        return array;
    }

}
